//lodash---curry柯里化原理模拟

function curry(fn) {
  return function curriedFn(...args) {
    //如果传入参数小于函数规定参数数量
    //传入参数可以用函数名加length获取
    console.log(fn.length);
    if (args.length < fn.length) {
      return function () {
        //返回函数并且把所有参数拼接，arguments是违一个数组
        //args是以前函数传入的参数,agruments是当前函数传入的参数
        return curriedFn(...args.concat(Array.from(arguments)));
      };
    }
    //传入参数与规定参数一致调用
    //不加着3点输出的是一个违数组，加了是展开数字的意思输出的是3个数字
    return fn(...args);
  };
}
function getNum(a, b, c) {
  return a + b + c;
}

const curried = curry(getNum);
console.log(curried(1, 2, 3));
// console.log(curried(1)(2, 3));
// console.log(curried(1, 2)(3));
